import axios from 'axios'
import {devApi, prodApi} from './myConfig'
import {Decrypt, Encrypt} from "./secret";

// create an axios instance
const service = axios.create({
  baseURL: prodApi, // url = base url + request url
  withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

// request interceptor
service.interceptors.request.use(
  // config => {
  //   config.headers['version'] = '2.0.0'
  //   config.headers['Authorization'] = uni.getStorageSync('user_info').token
  //   config.headers['client-key'] = uni.getStorageSync('user_info').key ? uni.getStorageSync('user_info').key : ''
  //   config.headers['Enable-App-Encrypt'] = 1
  //   if (['get', 'GET'].includes(config.method)) {
  //     config.params.timestamp = parseInt(`${new Date().getTime() / 1000}`) + ''
  //   } else {
  //     config.data.timestamp = parseInt(`${new Date().getTime() / 1000}`) + ''
  //   }
  //   config.data = {
  //     data: decodeURIComponent(Encrypt(['get', 'GET'].includes(config.method) ? config.params : config.data)),
  //     timestamp: parseInt(`${new Date().getTime() / 1000}`) + ''
  //   }
  //   let console_config = {
  //     url: config.baseURL + config.url,
  //     method: config.method,
  //     data: config.data,
  //     headers: config.headers,
  //   }
  //     console.log(console_config)
  //   if (config.loading) {
  //     uni.showNavigationBarLoading();
  //   }
  //   return config
  // },
  // error => {
  //   console.log(error) // for debug
  //   return Promise.reject(error)
  // }

    //正式服

    config => {
        config.headers['version'] = '2.0.0'
        config.headers['Authorization'] = uni.getStorageSync('user_info').token
        let console_config = {
            url: config.baseURL + config.url,
            method: config.method,
            params: config.params,
            data: config.data,
            headers: {
                version: config.headers.version,
                Authorization: config.headers.Authorization,
            },
        }
        if (config.loading) {
            uni.showNavigationBarLoading();
        }
        console.log(JSON.stringify(console_config))
        return config
    },
    error => {
        console.log(error) // for debug
        return Promise.reject(error)
    }
)

// response interceptor
service.interceptors.response.use(
  // response => {
  //   uni.hideNavigationBarLoading();
  //   const res = response.data
  //     console.log(res.data)
  //   let decrypt_data = Decrypt(res.data);
  //     console.log(211111112123123)
  //     console.log(JSON.stringify(decrypt_data))
  //   let data = {
  //     code: res.code,
  //     data: decrypt_data,
  //     msg: res.msg,
  //   }
  //     console.log(data)
  //   if (data.code !== 200) {
  //     if(data.code === 2002004){
  //       uni.showModal({
  //         title: '提示',
  //         content: data.msg,
  //         showCancel: false,
  //         success:  (res)=> {
  //           if (res.confirm) {
  //             uni.redirectTo({
  //               url: '/pages/login/registration'
  //             })
  //           }
  //         }
  //       });
  //     }
  //     if (data.code === 2002001 || data.code === 2002002 || data.code === 2002012 || data.code === 2002006) {
  //       uni.redirectTo({
  //         url: '/pages/login/registration'
  //       })
  //     }
  //     if(data.code === 2019001){
  //       uni.showToast({
  //         title: data.msg,
  //         icon: 'none',
  //       })
  //     }
  //     return Promise.reject(data)
  //   } else {
  //     return data
  //   }
  // },
  // error => {
  //   console.log(error)
  //   uni.hideNavigationBarLoading();
  //   console.log(error.response)// for debug
  //   if (error.response && error.response.status === 500) {
  //     uni.showToast({
  //       title: '程序出小差，请稍后重试',
  //       icon: 'none',
  //     })
  //   }
  //   // if(error.response && error.response.status === 429){
  //   //   uni.showToast({
  //   //     title: '点击太频繁，请稍后重试',
  //   //     icon: 'none',
  //   //   })
  //   // }
  //   // if (error.includes('500')) {
  //   //   console.log('500')
  //   // }
  //   return Promise.reject(error)
  // }

    //正式服

    response => {
        uni.hideNavigationBarLoading();
        const res = response.data
        if (res.code !== 200) {
            if(res.code === 2002004){
                uni.showModal({
                    title: '提示',
                    content: res.msg,
                    showCancel: false,
                    success: function (res) {
                        if (res.confirm) {
                            uni.redirectTo({
                                url: '/pages/login/registration'
                            })
                        }
                    }
                });
            }
            if (res.code === 2002001 || res.code === 2002002 || res.code === 2002012 || res.code === 2002006) {
                uni.redirectTo({
                    url: '/pages/login/registration'
                })
            }
            if(res.code === 2019001){
                uni.showToast({
                    title: res.msg,
                    icon: 'none',
                })
            }
            return Promise.reject(res)
        } else {
            return res
        }
    },
    error => {
        console.log(error)
        uni.hideNavigationBarLoading();
        console.log(error.response)// for debug
        if(error.response && error.response.status === 500){
            uni.showToast({
                title: '程序出小差，请稍后重试',
                icon: 'none',
            })
        }
        // if(error.response && error.response.status === 429){
        //   uni.showToast({
        //     title: '点击太频繁，请稍后重试',
        //     icon: 'none',
        //   })
        // }
        // if (error.includes('500')) {
        //   console.log('500')
        // }
        return Promise.reject(error)
    }



)

axios.defaults.adapter = function (config) { //自己定义个适配器，用来适配uniapp的语法
  return new Promise((resolve, reject) => {
    let settle = require('axios/lib/core/settle');
    let buildURL = require('axios/lib/helpers/buildURL');
    uni.request({
      method: config.method.toUpperCase(),
      url: config.baseURL + buildURL(config.url, config.params, config.paramsSerializer),
      header: config.headers,
      data: config.data,
      dataType: config.dataType,
      responseType: config.responseType,
      sslVerify: config.sslVerify,
      complete: function complete(response) {
        response = {
          data: response.data,
          status: response.statusCode,
          errMsg: response.errMsg,
          header: response.header,
          config: config
        };

        settle(resolve, reject, response);
      }
    })
  })
}

export default service
